#!/usr/bin/env python3
"""
小红书功能使用示例
展示如何使用小红书自动化发布功能和定时任务调度
"""

import asyncio
import json
import sys
from pathlib import Path

# 添加项目根目录到Python路径
project_root = Path(__file__).parent.parent
sys.path.insert(0, str(project_root))

from app.services.xiaohongshu_service import xiaohongshu_service
from app.db.session import SessionLocal
from app.crud.crud_xiaohongshu import (
    xiaohongshu_account_crud,
    xiaohongshu_publish_log_crud
)
from app.xxl_job.handler import (
    xiaohongshu_publish_handler,
    xiaohongshu_login_check_handler,
    xiaohongshu_account_sync_handler
)
import logging

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)


async def example_login_and_save():
    """示例：登录并保存账号信息"""
    logger.info("=== 小红书登录示例 ===")
    
    try:
        # 1. 打开登录页面
        logger.info("1. 打开登录页面...")
        result = await xiaohongshu_service.open_login_page()
        logger.info(f"打开登录页面结果: {result}")
        
        if not result["success"]:
            logger.error("打开登录页面失败")
            return False
        
        # 2. 等待用户手动登录
        logger.info("2. 请在浏览器中手动完成登录...")
        input("登录完成后按回车键继续...")
        
        # 3. 检查登录状态
        logger.info("3. 检查登录状态...")
        status_result = await xiaohongshu_service.check_login_status()
        logger.info(f"登录状态: {status_result}")
        
        if not status_result.get("is_logged_in", False):
            logger.error("登录状态检查失败")
            return False
        
        # 4. 获取并保存登录信息
        logger.info("4. 获取登录信息...")
        login_info = await xiaohongshu_service.get_login_info()
        logger.info(f"登录信息: {json.dumps(login_info, indent=2, ensure_ascii=False)}")
        
        if login_info["success"]:
            logger.info("登录信息获取成功！")
            return True
        else:
            logger.error("获取登录信息失败")
            return False
            
    except Exception as e:
        logger.error(f"登录示例执行失败: {e}")
        return False


async def example_publish_post():
    """示例：发布图文内容"""
    logger.info("=== 小红书发布示例 ===")
    
    try:
        # 检查登录状态
        status_result = await xiaohongshu_service.check_login_status()
        if not status_result.get("is_logged_in", False):
            logger.error("用户未登录，请先执行登录示例")
            return False
        
        # 准备发布内容
        title = "AI自动化发布测试"
        content = """这是一个通过AI自动化工具发布的测试内容。
        
✨ 功能特点：
• 自动化发布图文内容
• 支持定时任务调度
• 多账号管理
• 发布状态跟踪

#AI自动化 #小红书发布 #技术分享"""
        
        images = []  # 可以添加图片路径
        
        logger.info(f"准备发布内容:")
        logger.info(f"标题: {title}")
        logger.info(f"内容: {content[:100]}...")
        
        # 执行发布
        result = await xiaohongshu_service.publish_post(
            title=title,
            content=content,
            images=images
        )
        
        logger.info(f"发布结果: {json.dumps(result, indent=2, ensure_ascii=False)}")
        
        if result["success"]:
            logger.info("发布成功！")
            return True
        else:
            logger.error(f"发布失败: {result['message']}")
            return False
            
    except Exception as e:
        logger.error(f"发布示例执行失败: {e}")
        return False


async def example_xxl_job_handlers():
    """示例：测试XXL-Job处理器"""
    logger.info("=== XXL-Job处理器测试示例 ===")
    
    try:
        # 1. 测试登录状态检查处理器
        logger.info("1. 测试登录状态检查处理器...")
        login_check_result = await xiaohongshu_login_check_handler("")
        logger.info(f"登录状态检查结果: {json.dumps(login_check_result, indent=2, ensure_ascii=False)}")
        
        # 2. 测试账号数据同步处理器
        logger.info("2. 测试账号数据同步处理器...")
        sync_result = await xiaohongshu_account_sync_handler("")
        logger.info(f"账号数据同步结果: {json.dumps(sync_result, indent=2, ensure_ascii=False)}")
        
        # 3. 测试发布处理器
        logger.info("3. 测试发布处理器...")
        publish_params = {
            "title": "XXL-Job定时发布测试",
            "content": "这是通过XXL-Job定时任务发布的测试内容。\n\n#定时发布 #XXL-Job #自动化",
            "images": []
        }
        
        publish_result = await xiaohongshu_publish_handler(json.dumps(publish_params))
        logger.info(f"发布处理器结果: {json.dumps(publish_result, indent=2, ensure_ascii=False)}")
        
        return True
        
    except Exception as e:
        logger.error(f"XXL-Job处理器测试失败: {e}")
        return False


def example_database_operations():
    """示例：数据库操作"""
    logger.info("=== 数据库操作示例 ===")
    
    db = SessionLocal()
    try:
        # 1. 获取所有账号
        logger.info("1. 获取所有账号...")
        accounts = xiaohongshu_account_crud.get_multi(db)
        logger.info(f"找到 {len(accounts)} 个账号")
        
        for account in accounts:
            logger.info(f"账号: {account.username} ({account.nickname}) - 粉丝: {account.followers}")
        
        # 2. 获取当前账号
        logger.info("2. 获取当前账号...")
        current_account = xiaohongshu_account_crud.get_current_account(db)
        if current_account:
            logger.info(f"当前账号: {current_account.username} ({current_account.nickname})")
        else:
            logger.info("未找到当前账号")
        
        # 3. 获取发布日志
        logger.info("3. 获取最近发布日志...")
        logs = xiaohongshu_publish_log_crud.get_recent_logs(db, days=7, limit=10)
        logger.info(f"找到 {len(logs)} 条最近发布日志")
        
        for log in logs:
            logger.info(f"发布日志: {log.title} - 状态: {log.status} - 时间: {log.created_at}")
        
        return True
        
    except Exception as e:
        logger.error(f"数据库操作示例失败: {e}")
        return False
    finally:
        db.close()


async def example_scheduled_publish():
    """示例：模拟定时发布任务"""
    logger.info("=== 定时发布任务示例 ===")
    
    try:
        # 模拟定时任务参数
        scheduled_posts = [
            {
                "title": "早安分享 - AI技术趋势",
                "content": "早上好！今天分享一些AI技术的最新趋势。\n\n#AI技术 #早安分享 #技术趋势",
                "schedule_time": "09:00"
            },
            {
                "title": "午间休息 - 效率工具推荐",
                "content": "午间休息时间，推荐几个提高工作效率的工具。\n\n#效率工具 #工作技巧 #午间分享",
                "schedule_time": "12:00"
            },
            {
                "title": "晚间总结 - 今日学习心得",
                "content": "今天的学习总结和心得分享。\n\n#学习心得 #晚间总结 #知识分享",
                "schedule_time": "21:00"
            }
        ]
        
        logger.info(f"准备 {len(scheduled_posts)} 个定时发布任务")
        
        for i, post in enumerate(scheduled_posts, 1):
            logger.info(f"\n--- 定时任务 {i} ---")
            logger.info(f"标题: {post['title']}")
            logger.info(f"预定时间: {post['schedule_time']}")
            
            # 在实际应用中，这里会创建XXL-Job定时任务
            # 这里只是模拟执行
            params = {
                "title": post["title"],
                "content": post["content"],
                "images": []
            }
            
            logger.info(f"模拟执行定时发布任务...")
            # result = await xiaohongshu_publish_handler(json.dumps(params))
            # logger.info(f"执行结果: {result}")
            
            logger.info("定时任务已创建（模拟）")
        
        logger.info("\n所有定时发布任务已设置完成")
        return True
        
    except Exception as e:
        logger.error(f"定时发布任务示例失败: {e}")
        return False


async def main():
    """主函数"""
    logger.info("小红书功能使用示例")
    logger.info("=" * 50)
    
    while True:
        print("\n请选择要执行的示例:")
        print("1. 登录并保存账号信息")
        print("2. 发布图文内容")
        print("3. 测试XXL-Job处理器")
        print("4. 数据库操作示例")
        print("5. 定时发布任务示例")
        print("0. 退出")
        
        choice = input("\n请输入选项 (0-5): ").strip()
        
        if choice == "0":
            logger.info("退出示例程序")
            break
        elif choice == "1":
            await example_login_and_save()
        elif choice == "2":
            await example_publish_post()
        elif choice == "3":
            await example_xxl_job_handlers()
        elif choice == "4":
            example_database_operations()
        elif choice == "5":
            await example_scheduled_publish()
        else:
            print("无效选项，请重新选择")
        
        input("\n按回车键继续...")


if __name__ == "__main__":
    asyncio.run(main())